我们程序员 : 从代码诞生到AI兴起 收藏

  • 书籍语言:简体中文
  • 下载次数:4746
  • 书籍类型:Epub+Txt+pdf+mobi
  • 创建日期:2025-07-25 18:10:03
  • 发布日期:2025-09-07
  • 连载状态:全集
  • 书籍作者:罗伯特·C.马丁
  • 运行环境:pc/安卓/iPhone/iPad/Kindle/平板

内容简介

你和我,我们程序员掌控世界:跨越半个世纪的编码文明史

在本书中,软件行业传奇人物罗伯特·C.马丁(人称Uncle Bob,鲍勃大叔)携我们步入计算机编程的天地,将我们的目光聚焦在凭借聪明才智与顽强意志改变世界的人物的生命轨迹。从查尔斯·巴贝奇(CharlesBabbage)、阿达·洛芙莱斯(Ada Lovelace),到艾伦·图灵(Alan Turing)、格蕾丝·霍珀(Grace Hopper)与丹尼斯·里奇(Dennis Ritchie),探寻这些为现代计算技术奠定基础的开创性先驱者们的人生故事,描述他们披荆斩棘的求索历程。

这部具有回忆录特质的科技史著作宛如一幅波澜壮阔的历史长卷,蕴含着深邃的技术洞见,深入剖析了在比特和字节层面缔造计算技术的编程突破。本书穿越时空,将技术奇迹与背后的鲜活人物事迹相结合,让读者一窥那些推动技术巨轮滚滚向前的先驱者所经历的奋斗历程。他们的故事并非只有鲜花和掌声,还有至暗时刻的挣扎——资金枯竭、上司的否定、重大失败和患上致命疾病,也曾无情地折磨他们。他们的经历与计算技术本身的演进轨迹交融成画,编程领域也从最初的草创时期发展到如今云计算和AlI兴盛的时代。书中不仅勾勒出计算领域的进化脉络,还探讨了Al技术如何改变编程的未来走向,以及由此衍生出的伦理挑战。

核心议题

了解编程的起源,及其如何塑造了当今的技术格局。

编程先驱者的人文侧写——是什么驱动他们不断前行,他们又跨越了哪些障碍。从汇编语言萌芽到面向对象语言崛起的关键技术突破。

第二次世界大战对推动计算机科学发展的历史性作用。关于Al伦理及编程未来的深刻洞见与前瞻性预测。


作者简介

罗伯特·C.马丁(Uncle Bob)自1970年起投身编程与软件开发领域,担任程序员和软件开发专家。马丁是Uncle Bob咨询公司的创始人,并与他的儿子米卡·马丁(Micah Martin)共同创立了Clean Coders公司。马丁在各类行业期刊上发表了数十篇文章,是国际会议和行业展览上的常驻演讲嘉宾。他著有多部书籍,包括《敏捷软件开发:原则、模式和实践》《UML: Java程序员指南》《代码整洁之道》《程序员的职业素养》《整洁架构之道》《敏捷整洁之道》《匠艺整洁之道》及《函数式设计:原则、模式与实践》。马丁曾担任C++Report杂志主编三年,并担任敏捷联盟的首任主席,其思想持续塑造全球软件开发的实践模式与发展路径。

编辑推荐

当代码成为时代注脚,谁在书写程序员的历史?


Robert C. Martin(Bob大叔)的《我们程序员:从代码诞生到AI兴起》,是一部打破技术史书写范式的里程碑之作。它既非冰冷的年表堆砌,亦非天才的孤光独照——而是将程序员群体置于技术演进的核心,用半个世纪的亲历者视角,完成一场从“英雄崇拜”到“凡人史诗” 的叙事革命。


下载地址

序言

简单敲入五个字符“vim .”,就能启动我最喜欢的编辑器。这可不是普通的编辑器,而是NeoVim。如今的NeoVim具备键绑定、语言服务器协议(LSP)、语法高亮、内置错误诊断等多种功能。经过全面定制后,NeoVim仅需数毫秒即可启动,实现近乎即时的文件编辑。即使项目有数千个文件,LSP也能迅速反馈项目的状态,将错误信息即时加载到快速修复菜单中,以便快速定位。只需要几个按键,我就能构建、启动、运行或测试项目。我的计算机甚至能通过AI将自然语言直接转换为代码!更神奇的是,这个AI还能在我编码时实时协作,瞬间生成大量(虽然质量存疑的)代码。这一切听起来令人惊叹 。NeoVim的体验堪称美妙流畅、疾如闪电。然而,NeoVim却被某些开发者视为古董。“老顽固!”1他们用这样的称呼嘲讽使用NeoVim并花时间配置的人。毕竟,像IntelliJ那样全功能的集成环境 唾手可得,甚至它所支持的功能之丰富已经远超我这个NeoVim用户的想象边界!

我之所以讲述这些,是因为我们正身处技术奇迹之中而不自知。遭此非议,不是因为我坚守“过时”的工具,也不是因为开发者间的理念之争——这些早已司空见惯。真正震撼的是:文本编辑这项人类智慧的结晶,当前在我们眼中竟如此稀松平常。自动补全、语法高亮、动态文档,这些曾经是具有石破天惊效果的功能,如今却成了开发者的空气与水。回溯历史,人类用了30年才从机器码跃升至高级编程语言,又等待半个世纪迎来语法高亮,直到20世纪70年代后期才出现跨语言的智能支持。编辑器的进化史,本就是一部浓缩的人类计算文明史。

比起使用古董编辑器,我更痴迷于聆听往昔的故事。那些“真正的程序员”能根据磁鼓存储器的旋转节奏来优化代码,以达到最佳的读取速度。多希望能亲眼见证大师们在打孔卡片上施展魔法!或许这只是一种浪漫的怀旧,但那个时代的每个突破都重塑了世界。在本书中,我有机会与计算历史中那些缔造过重大飞跃的创造者们并肩走过那段时光。我看到查尔斯·巴贝奇(Charles Babbage)用差分机震撼了维多利亚时代的沙龙,机械巨兽发出的叮叮当当的运转声,所产生的东西在当时看来一定是魔法。那种感受恰似今天我们初见大语言模型或Copilot自动生成代码时的震撼。我敢打赌,在那个时候你一定会在晚宴上听到客人惊呼:“机器真的能思考?”我感受到那时的团队昼夜不停工作的压力,以及在二战关键计算中对更强计算能力的迫切需求,这些计算使得原子弹成为可能。他们没有Herman Miller人体工程办公椅,也没有时尚的站立式办公桌;见鬼,他们甚至都没有显示器或键盘!然而,他们取得了不可思议的成果,改变了人类发展的进程。本书是这段计算历史表述中最引人入胜的讲述之一。

如果一个程序员没听说过Uncle Bob的名号,我会非常惊讶。他在我们行业中绝对是多产的。多年来,我只是通过 Twitter以及他在整洁代码和敏捷开发方面的重要贡献才知道Uncle Bob。在我心中,他一直是一种抽象的存在2,直到某天在Twitter上我与他互动后我的心态才发生了变化。通过电子邮件、电话,甚至播客的交流,我看到一个远比教科书更立体的罗伯特·C. 马丁:他务实,在需要时愿意做出让步。在播客节目中,最一致的评论是“他温文尔雅,笑容满面!”这反映了他豁达的性格和丰富充实的生活经历。他是一个真正的软件工程师,也是我们学习的榜样。

我个人已经厌倦了无数关于空格键、编辑器以及面向对象编程与函数式编程的争论,这些争论在X上激烈地展开着。我感兴趣的是,到底是谁创造了这些引发争论的技术。本书连接起过去的岁月和未来的希望,将更有意义的东西呈现给我们,而Uncle Bob就是讲述这个故事的完美人选。


——ThePrimeagen3


1 原文是“ Luddite!”。 Luddite,即卢德主义者,是 19世纪英国的一个激进主义团体,反对工业革命,主张手工劳动和传统手工艺。——译者注

2 原文是“Avatar of AbstractBuilderFactory”。这个表述是对Uncle Bob的幽默化隐喻,结合了软件工程中的两个经典设计模式:Abstract Factory(抽象工厂模式)和Builder(建造者模式)。前者是创建相关对象家族的接口,隐藏具体实现。后者是分步骤构建复杂对象的模式。将两者合成为“AbstractBuilderFactory”这个虚构概念,其隐喻意义在于:强调Uncle Bob作为软件架构大师的形象,暗示其著作中强调抽象设计和模式应用的特点。——译者注

3 ThePrimeagen是YouTube频道号,主持人Michael Paulson是科技界颇具影响力的人物,以快速使用 vim编辑器、编程直播、技术视频等内容而在Twitch和YouTube上闻名。——译者注














自 序


我即将为你讲述这一切是如何开始的。这是一个曲折的故事,讲述了那些非凡人物的生活与挑战,他们所处的非凡时代,以及他们所掌握的非凡机器。

但在我们深入探索这些曲折的历程之前,或许先来一个小小的预览是合适的——只是为了激发你的兴趣。

需要可能是发明之母,但没有什么比战争更能激发需求。我们这个行业的推动力正是由战争的剧变——尤其是第二次世界大战——所创造的。

在20世纪40年代,战争技术已经超越了我们的计算能力。仅靠人类操作的台式计算器根本无法满足来自战争各领域的计算需求。

问题在于,为了近似计算从火炮发射的炮弹到目标的路径,需要进行大量的加减乘除运算。这类问题并不能通过d=rt或s=1/2at2这样的简单公式来解决。这些问题要求将时间和距离分解成成千上万个小段,并逐段模拟和近似弹道。这种模拟需要大量计算。

在过去几个世纪里,所有这些计算都是由成群的人用笔和纸完成的。直到20世纪,他们才得到了加法机来协助这项任务。完成这些计算以及组织执行计算的团队是一项艰巨的任务。1计算本身可能需要这些团队花费数周甚至数月的时间。

在19世纪,人们曾梦想过得到能够完成这些壮举的机器。甚至创造过一些功能比较简单的原型机。但它们只是玩具和奇观,是精英们在晚宴上展示的花哨装置。很少有人认为它们是值得使用的工具;考虑到它们不菲的成本使一切变得更遥远。

但第二次世界大战改变了这一切。需求迫切,成本变得无关紧要。于是,那些早期的梦想变成了现实,庞大的计算机器被建造出来。

那些编写代码和操作机器的人是计算领域的先驱。起初,他们被迫在最原始的条件下工作。编程指令实际上是通过在长长的纸带上逐一打孔来完成的,机器会读取并执行这些纸带。这种编程方式极其烦琐,且完全不容错。此外,这种程序的执行可能需要数周时间,其间需要详细监控和持续干预。例如,执行程序中的循环时,需要通过手动重新定位纸带以进行每次迭代,并手动检查机器状态以确定循环是否应终止。

随着时间的推移,机电机器被电子真空管机器所取代,后者将数据存储在通过长长的水银管传播的声波中。打孔卡片最终被存储程序取代。这些新技术由早期的先驱们推动,并促进了进一步的创新。

20世纪 50年代初的第一个编译器不过是带有特殊关键字的汇编器,用于加载和调用预先编写的子程序——有时来自纸带或磁带。后来的编译器尝试了表达式和数据类型,但仍然原始且缓慢。到了20世纪50年代末,约翰·巴克斯(John Backus)的 FORTRAN和格蕾丝·霍珀(Grace Hopper)的COBOL引入一种全新的思维方式。程序员之前手工编写的二进制代码从此可由能够读取和解析抽象文本的计算机程序生成。

在20世纪60年代初,迪杰斯特拉(Dijkstra)的ALGOL提升了抽象层次。几年后,达尔(Dahl)和尼加德(Nygaard)的SIMULA 67再次将抽象层次提升到新高度。

结构化编程和面向对象编程就是从这些起点中诞生的。

同时,约翰·凯梅尼(John Kemeny)和他的团队在1964年通过创建BASIC和分时系统将计算带给了普通人。BASIC是一种几乎任何人都能理解和使用的语言。分时系统允许许多人方便地同时使用一台昂贵的计算机。

此后,肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)在60年代末和 70年代初,通过创建C语言和UNIX,开辟了软件开发的世界。从那以后,软件开发领域开始了飞速发展。

20世纪60年代的大型机革命之后是70年代的小型机革命和80年代的微型计算机革命。个人电脑在80年代席卷了整个行业,随后迅速迎来了面向对象革命、互联网革命和敏捷革命。软件开始主导一切。

9·11事件和互联网泡沫破裂使我们停滞了几年,但随后迎来了Ruby/Rails革命和移动革命。然后,互联网变得无处不在。社交网络蓬勃发展,然后衰落,而人工智能则崛起,雷霆万钧般涌来。

这让我们来到了现在,思考未来。所有这些,以及更多,都将在本书的页面上进行讨论。所以,如果你准备好了,那就系好安全带——因为这将是一次穿梭于时空的绮丽又狂野的旅程。


1 要亲眼目睹这样的任务是如何进行的,推荐参加2024年圆周率日庆祝活动。在一周内,一个由数百人组成的非常协调的团队手工计算了100多位数字。“一个世纪以来最大的手工计算![圆周率日2024]”由Stand-up Maths于2024年3月13日发布在YouTube上。















故事时间线


本书故事所描述的人物和事件都展示在这条时间线上。当你阅读故事中的相关事件时,可从这里定位,了解它们发生的背景。例如,你可能会发现一件有趣的事,如 FORTRAN1和Sputnik2在时间上是巧合的,两者在无意中邂逅;或者肯·汤普森(Ken Thompson)在迪杰斯特拉(Dijkstra)提出GOTO语句有害之前就加入了贝尔实验室(Bell Labs)。


1 世界上第一门高级编程语言,IBM首次发布于1957年。详见书中章节。——译者注

2 世界上第一颗人造卫星,于1957年10月4日成功发射。详见书中章节。——译者注


目录

第Ⅰ部分 开端

第1章 我们是谁? 3

Ⅱ部分 技术巨擘

第2章 巴贝奇:第一位计算机工程师 11

2.1 生平 11

2.2 数学用表 12

2.2.1 制表之道 12

2.2.2 有限差分法 14

2.3 巴贝奇的远见 17

2.4 差分机 18

2.5 机械的符号系统 19

2.6 派对魔术 20

2.7 差分机的终结 20

2.8 分析机 22

2.9 阿达:洛芙莱斯伯爵夫人 23

2.10 第一位程序员? 26

2.11 未竟之宏愿 27

2.12 结论 29

参考文献 29

第3章 希尔伯特、图灵与冯 · 诺伊曼: 第一代计算机架构师 31

3.1 大卫·希尔伯特 31

3.1.1 哥德尔 33

3.1.2 反犹主义风暴 35

3.2 约翰·冯·诺伊曼 36

3.3 艾伦·图灵 38

3.4 图灵-冯·诺伊曼架构 40

3.4.1 图灵的机器 40

3.4.2 冯·诺伊曼的历程 44

参考文献 49

第4章 格蕾丝 · 霍珀:第一位软件工程师 51

4.1 军旅生涯:1944年夏天 52

4.2 规范:1944—1945年 55

4.3 子程序:1944—1946年 58

4.4 研讨会:1947年 59

4.5 UNIVAC:1949—1951年 60

4.6 排序与编译器的起源 64

4.7 酗酒:大约1949年 64

4.8 编译器:1951—1952年 65

4.9 A类编译器 66

4.10 编程语言:1953—1956年 68

4.11 COBOL:1955—1960年 69

4.12 我对COBOL的吐槽 72

4.13 无可争议的成功 72

参考文献 73

第5章 约翰 · 巴克斯:第一种高级语言 75

5.1 生平 75

5.2 令人着迷的彩色灯光 76

5.3 快速编码与701计算机 78

5.4 对速度的需求 80

5.4.1 分工 84

5.4.2 我对FORTRAN的吐槽 85

5.5 算法语言(Algol)及其他 85

参考文献 87

第6章 艾兹格 · 迪杰斯特拉:第一位计算机科学家 89

6.1 生平 89

6.2 ARRA计算机:1952—1955年 91

6.3 ARMAC计算机:1955—1958年 94

6.4 ALGOL语言与X1计算机:1958—1962年 95

6.5 阴霾如墨渐漫:1962年 98

6.6 计算机科学的崛起:1963—1967年 99

6.6.1 科学性 100

6.6.2 信号量 100

6.6.3 结构化编程 101

6.6.4 数学证明的迷思 101

6.7 数学:1968年 102

6.8 结构化编程:1968年 104

参考文献 107

第7章 尼加德与达尔:第一种面向对象编程语言 109

7.1 克里斯滕·尼加德 109

7.2 奥莱-约翰·达尔 110

7.3 Simula语言与面向对象编程 111

参考文献 119

第8章 约翰 · 凯梅尼:第一种“大众化”编程语言——BASIC 121

8.1 约翰·凯梅尼的生平 121

8.2 托马斯·库尔茨的生平 123

8.3 革命性的想法 123

8.4 看似不可能的任务 124

8.5 BASIC语言 125

8.6 分时系统 126

8.7 操作计算机的青少年 127

8.8 转型 127

8.9 盲目先知 128

8.9.1 共生关系? 128

8.9.2 预言 129

8.10 雾里看花 132

参考文献 132

第9章 朱迪思 · 艾伦 133

9.1 ECP-18计算机 133

9.2 朱迪思的经历 134

9.3 辉煌的职业生涯 137

参考文献 138

第10章 汤普森、里奇与克尼汉 139

10.1 肯·汤普森 139

10.2 丹尼斯·里奇 141

10.3 布莱恩·克尼汉 144

10.3.1 Multics系统 145

10.3.2 PDP-7与《太空旅行》游戏 147

10.4 UNIX操作系统 149

10.5 PDP-11计算机 151

10.6 C语言 153

10.7 克尼汉和里奇 155

10.7.1 说服与合作 157

10.7.2 软件工具 157

参考文献 158

第Ⅲ部分 技术拐点

第11章 20世纪60年代 163

11.1 ECP-18 166

11.2 父亲的支持和鼓励 168

第12章 20世纪70年代 169

12.1 1969年 169

12.2 1970年 172

12.3 1973年 174

12.4 1974年 176

12.5 1976年 179

12.6 1978年 182

12.7 1979年 183

参考文献 184

第13章 20世纪80年代 185

13.1 1980年 185

13.1.1 系统管理员 186

13.1.2 pCCU 187

13.2 1981年 188

13.2.1 DLU/DRU 188

13.2.2 苹果Ⅱ 189

13.2.3 新产品 190

13.3 1982年 190

13.4 1983年 192

13.4.1 麦金塔内部剖析 192

13.4.2 电子公告板系统(BBS) 193

13.4.3 泰瑞达公司的C语言 193

13.5 1984—1986年:语音响应系统(VRS) 193

13.6 1986年 194

13.6.1 技工派遣系统(CDS) 195

13.6.2 字段标记数据(FLD) 195

13.6.3 有限状态机 196

13.6.4 面向对象编程(OOP) 196

13.7 1987—1988年:英国 197

参考文献 198

第14章 20世纪90年代 199

14.1 1989—1992年:克利尔通信公司 199

14.1.1 Usenet 200

14.1.2 Uncle Bob 200

14.2 1992年:C++ Report 201

14.3 1993年:Rational公司 201

14.4 1994年:教育考试服务中心(ETS) 203

14.4.1 C++ Report专栏 204

14.4.2 模式 204

14.5 1995—1996年:第一本书、会议、课程及OM公司 205

14.6 1997—1999年:C++ Report、统一建模语言(UML)和互联网泡沫 206

14.7 1999—2000年:极限编程 207

参考文献 209

第15章 千禧年 211

15.1 2000年:极限编程(XP)领导力 211

15.2 2001年:敏捷开发的兴起和互联网泡沫的破裂 212

15.3 2002—2008年:在困境中彷徨 213

15.4 2009年:《计算机程序的构造和解释》与色度键 214

15.4.1 视频 215

15.4.2 cleancoders.com 215

15.5 2010—2023年:视频、技艺与专业精神 216

15.5.1 敏捷开发偏离正轨 216

15.5.2 更多书籍 217

15.5.3 疫情期间 217

15.6 2023年:发展停滞期 217

参考文献 218

第IV部分 未来

第16章 编程语言 223

16.1 数据类型 224

16.2 Lisp 225

第17章 人工智能 227

17.1 人类大脑 227

17.2 神经网络 229

17.3 构建神经网络并非编程 230

17.4 大语言模型 230

17.5 大型X模型的影响 235

第18章 硬件 237

18.1 摩尔定律 238

18.1.1 多核 238

18.1.2 云计算 238

18.1.3 平台期 238

18.2 量子计算机 239

第19章 万维网 241

第20章 未来的编程 245

20.1 航空类比 245

20.2 设计原则 246

20.3 方法 246

20.4 规范 246

20.5 职业道德 247

参考文献 247

后记 249

术语表 257

其他重要人物名录 273


短评

    产品特色